问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

C语言,关于指针 (point) 的程序。文字列的长度。

发布网友 发布时间:2022-06-07 15:11

我来回答

4个回答

热心网友 时间:2023-10-03 08:56

我知道有一个人写了一些文章然后有人整理了下来。
他写的东西都是代码, 而且是非常详细的注释那种的。
这个人叫管宁
你可以到网上搜搜。
我这里有给你贴出来一点,你可以看看是否合你的意:

在c/c++中利用数组名作为函数参数传递排序和用指针进行排序的例子。

以下两个例子要非常注意,函数传递的不是数组中数组元素的真实值而是数组在内存中的实际地址。

#include <stdio.h>

void main(void)
{

void reversal();
static int a[10] = {0,1,2,3,4,5,6,7,8,9}; /* 建立一个数组并初始化 */
int i;
for (i=0;i<10;i++)
{
printf("%d ",a);
}
printf("\n");
reversal(a,10); /* 调用自定义涵数进行反向显示排序,并把数组a的起始地址传送给形式参数x */

for (i=0;i<10;i++)
{
printf("%d ",a);
}
printf("\n");

}

void reversal(x,n)
int x[],n; /* 定义形式参数 */
{
int m=(n-1)/2; /* 计算10个数需要循环几次,因为是两两调换第一个数组是x[0]故应该是int(9/2) */
int temp,i,j; /* 建立零时变量temp用于每次交换处理时零时存储x的值 */
for (i=0;i<=m;i++)
{
j=n-1-i; /* 反向计算出被调换的数组下标,例如x[0] 对应的x[n-1-i]就是x[9] */
temp=x;
x=x[j];
x[j]=temp;
}
}

/* 次题需要注意的是:这里由于a[10]和x[10]是共同享内存地址位的所以进行交换后a[10]的实际值也就发生了改变 */

#include <stdio.h>

void main(void)
{

void reversal();
static int a[10] = {0,1,2,3,4,5,6,7,8,9}; /* 建立一个数组并初始化 */
int i;
for (i=0;i<10;i++)
{
printf("%d ",a);
}
printf("\n");
reversal(a,10); /* 调用自定义涵数进行反向显示排序,并把数组a的起始地址传送给形式参数x */

for (i=0;i<10;i++)
{
printf("%d ",a);
}
printf("\n");

}

void reversal(x,n)
int *x,n; /* 定义x为指针变量 */
{
int temp,*p,*i,*j; /* 这里需要注意的是temp用与交换的时候临时存储数据的 */
i = x; /* 利用指针变量i存储数组a的起始地址 */
p = x + ((n-1)/2); /* 计算最后一次循环的时候数组a的地址 */
j = x + n - 1; /* 计算数组a也就是a[9]的结束地址好用于交换 */
for (;i<=p;i++,j--) /* 利用循环和指针进行数组元素值的交换 */
{
temp=*i; /* 用temp临时存储*i也就是循环中a实际的值 */
*i=*j;
*j=temp;
}
}

/* 此例同样要注意到利用指针进行数组的操作同样改变了实际数组各元素的值 */
==============================

c/c++中指针学习的两个绝好例子

对于众多人提出的c/c++中指针难学的问题做个总结:

指针学习不好关键是概念不清造成的,说的简单点就是书没有认真看,指针的学习犹如人在学习饶口令不多看多学多练是不行的,下面是两个很经典的例子,很多书上都有,对于学习的重点在于理解*x和x的理解,他们并不相同,*x所表示的其实就是变量a本身,x表示的是变量a在内存中的地址,如果想明白可以输出观察cout<<*x"|"x;,当定义了int *x;后对x=&a的理解的问题。仔细阅读和联系下面的两个例子我想指针问题就不是难点了!

#include <stdio.h>

main()
{
int a,b; /* 定义a,b两个整形变量用于输入两个整数 */
int *point_1,*point_2,*temp_point; /* 定义三个指针变量 */
scanf("%d,%d",&a,&b); /* 格式化输入a,b的值 */
point_1=&a; /* 把指针变量point_1的值指向变量a的地址 */
point_2=&b; /* 把指针变量point_2的值指向变量b的地址 */
if (a<b)
{
temp_point=point_1; /* 这里的temp_point是用于临时存储point_1的值也就是变量a的地址的 */
point_1=point_2; /* 把point_2的值赋予point_1 */
point_2=temp_point;
/* 由于point_1的值已经改变无法找到,利用前面临时存储的也就是temp_point找回原point_1的值赋予point_2,打到把point_1和point_2值对换的目的*/
}
printf("%d,%d",*point_1,*point_2); /* 利用*point_1和*point_2也就是分辨指向b和a的方法把值显示自爱屏幕上 */
}

/* 此题需要注意和了解是的此法并没有改变变量a,b的值只是利用指针变量分别存储a和b的地址,然后再把那两个指针变量的值对换一下其实就是存储在
指针变量里面a与b的地址对换,在利用*point_1和*point_2的方式把调换后的值显示出来这里的*point_1实际就是a,此中算法并非真的改变a,b的值,而是
利用指针进行地址交换达到大小排序的目的.
*/

#include <stdio.h>

main()
{
int a,b; /* 定义a,b两个整形变量用于输入两个整数 */
int *point_1,*point_2; /* 定义三个指针变量 */
scanf("%d,%d",&a,&b); /* 格式化输入a,b的值 */
point_1 = &a; /* 把指针变量point_1的值指向变量a的地址 */
point_2 = &b; /* 把指针变量point_2的值指向变量b的地址 */
compositor(point_1,point_2); /* 调用自定义的排序涵数,把a,b的地址传递给point_1和point_2 */
printf("%d,%d",a,b); /* 打印出a,b的值 */
}

static compositor(p1,p2)
int *p1,*p2; /* 定义形式参数p1,p2为指针变量 */
{
int temp; /* 建立临时存储变量 */
if (*p1<*p2) /* 如果*p1<p2,注意这里的*p1和*p2其实就是a和b */
{
temp = *p1; /* 利用变量temp用于临时存储*p1和就是a的值 */
*p1 = *p2; /* 将*p1的值也就是a的值换成*p2的值也就是b的值,等价于a=b */
*p2 = temp; /* 将*p2的值也就是temp的值等价于b=temp */
}
}

/* 注意:此题与上题不同的是,直接改变了a于b的值达到真实改变的目的 */

热心网友 时间:2023-10-03 08:56

如果我没有理解错的话
char s[256],*p;
int length;//①
length=0;//②
scanf("%s",&s);//③
p=s;//④
while(*p!=NULL)
{
p++;
length++;
}//⑤⑥
printf("%d\n",length);//⑦

热心网友 时间:2023-10-03 08:56

楼主的语义确实别扭。。。
char s[256];
char *p = s;
int length = 0;
while ((*(p++) = getchar())!=NULL)
length++;
printf("%d\d",length);
应该是这样吧~

热心网友 时间:2023-10-03 08:57

要是以身相许就好了!

貌似是用台湾的术语描述的。

char s[256];
char *p = s;
int length = 0;
while ((s[length] = getchar())!=NULL) length++, p++;

printf("%d\d",length);
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
这是个成本会计题,马上要考这道原题了,求大虾帮忙 财务管理类问题,求大虾帮忙,小弟感激不尽。具体问题看问题补充。_百度... 光影魔术手怎么换底色 光影魔术手换底色教程 ...米的绳子围绕一棵树干饶了6圈,还余下1.16米,这棵树干上的直径大约是... ...还余下1.16米,这棵树的树干的直径大约是多少米?求算式! ibm x3500 M5 服务器 运行时风扇声音好大,吵死了,可以下掉一个吗... IBMX3500 M5,最近老是出现自动关机的情况,需要把服务器电源拔掉半分钟... 治疗萎缩性胃炎的方法 怎么治萎缩胃炎 JYF-40FS06电饭煲190块买的是假的吗 请问下在EXCEL表里比如我想用公式提取某个字前面的文字列:因为所以,我想提取所以前的因为这个公式 有道c语言编程题实在不会,如何从多个文字列中提取后缀是图片后缀的文字列?? excel数字列在文字列前面,如何有条件Sum C语言文字列怎么把姓和名区分开 比如说 输入姓名 ZHANG SAN 显示结果 姓 ZHANG 名 SAN text 文字列 String[] textList = text.split(&quot;&#92;r&#92;n&quot;); 求高手解释一下 Thanks!!! 如何在excel单元格中已有文字列再显示另外文字列 文字列是什么 java里的 最好能详细点 谢谢 excel表格怎么对文字列进行分割 请问鸡蛋酱油卤怎么做 当面表白.你需要准备些什么? php里如何设计类似淘宝购物的流程? 当面表白要怎么做 表白语要说些什么,我18她19 当面表白说些什么好呢? 喜欢一个人时,应该怎么对他进行表白呢? 当面向女生表白需要注意些什么东西?求朋友们详解。 怎么当面表白? qq手机空间花藤怎么找 手机空间的花藤在哪里 曹冲称象说明了什么道理 曹冲称象这里可你明白了什么? 玩日语游戏出现的一些错误,说是什么ANSI文字列什么的 win7的笔记本在安全模式下能连wifi,但是在正常模式下不行,显示连接可用,但是有个*的标志 西亚地区主要为什么人种。通用语言是什么,大多数居民信仰什么。 西亚的人种主要是 ,大多数居民信仰 教 我15岁了脸上有黑眼圈裂痕怎么办 做蛋糕,泡打粉加多了会怎么样? 电脑音量小图标不见了怎么办? 青岛地区医保卡办理 我电脑右下角的音量小图标不见了,怎么弄出来,控制面板里已经打勾了还是没有显示 老人在烟台退休,老家青岛的,现在单位办了医保卡,需要开通,要带哪些资料,要到什么地方办理? 我电脑的音量小图标不见了,怎么找出来? 青岛医保卡丢了怎么办理吗 青岛城阳医保卡办理 青岛医保卡办理流程 青岛即墨华山镇的去哪办理医保卡? 电脑上任务栏上控制音量的小图标在桌面上重复多个怎么去掉,不用重启电脑该怎么实现!!!谢谢!!! 桌面快捷方式调音量的小图标不见了怎么办 春望中的洪字是什么意思? 谁知道这两个杯子底座的洪字是什么意思啊? 一个,可以同时登录几台电脑吗?