-
字符串"the result is %d"这是存在于记忆中的全部内容。
int printf(const char *format [,argument]..
也就是说,第一个参数是字符串的地址。 所以第一个程序很好。
相当于:printf("the result is %d", t);
第二个程序不再有问题,但它输出 t 的地址(如果 int 溢出,则为负数)。 相反"printf("%d",*p);"输出 t 的值。
-
p 是指向字符串的第一个指针,即 *p 是字符串的第一个字母'
我从未见过你的这种输出,这就是它通常的使用方式。
printf("%s",p);
-
printf("%d",*p)。
printf 的第二个参数是一个变量,如果使用 p,则 p 是指针,它指向 t 的地址,所以它输出 t 的地址。
p 指向变量 t 的值,因此它输出 t 的值。
-
就我个人而言,我觉得你的第二个程序没有问题。 它只是 printf(."%d",p)输出值是 t 在内存中的地址。
-
关于角色类型笑的指针如下:
1.字符的指针触及枣字符,指向字符串常量的第一个地址,即字符串的第一个地址。
2. 字符指针也可以指向字符串。 我们可以用字符串常量初始化字符指针。
3.字符指针的值可以更改。
-
在 C 语言中,char* 表示字符指针类型,当它指向字符串的第一个元素时,它可用于表示字符串。
例如 char* str="learn c";中等"learn c"是通信长度为 8 的字符数组的常量,其最后一个元素是'\0',这句话的意思是执行的结果是指向 str"learn c"第一个字符'l',STR后面的连续内存依次存储'e','a','r','n','c','0'
扩大展会信息
定义 char* 注意事项:
1.当程序声明一个变量时,*只表示“它是一个无符号整数,这个整数指向某个内存地址,并且访问的sizeof(type)长度”不要与(*)运算符混淆。
2.二维数组的数组名称可以分配给指针数组的数组名称,pai=arr(错误),因为两者的类型不一致,二维数组名称的类型是指向int[类型的指针,指针数组的数组名称是指向int *[类型的指针。
-
题主问了两个问题:(1)程序**上的问题不对:编译正确,操作错误,因为char *p="breadfruit";p 是指向静态内存区域中面包果字符串的第一个字符的指针(可读,不可写)。
p1+3)='b';尝试写入,因此运行错误。 更改为 char p="breadfruit";您可以修改字符串,因为该字符串是您自己定义的局部变量,您可以根据需要更改它。 主要原因是两种写入方法的字符串存储在不同的位置,如果要更改字符串,则必须使用第二种写入方法。
2)为什么指针输出用p而不是*p:教材部分字符串的输入和输出非常清晰。当使用“%s”格式化程序输出字符串时,printf 函数中的输出项是字符数组名称(即字符数组的起始地址,强调地址)。
现在指针 p 指向字符数组的第一个字符,然后做这样的事情:通过 p 中的地址找到其字符数组的第一个字符,然后将其中的字符一一输出,直到遇到“0”。
-
char *p="breadfruit";这意味着 char* 指针被定义为静态内存区域“breadfruit”的第一个地址,这是不可写的!
不知道大家听懂不懂?
你得到了很好的补充。
char p="breadfruit";
它是定义一个具有 11 个字节空间的数组,可以自由读取。
-
第56集 指针指向一个字符串。
-
第56集 指针指向一个字符串。
你学过C语言吗?
首先:和ch有什么关系,str是一个指针,ch,是一个数组的第一个地址,虽然这两个地址可以是同一个地址,但是它的含义却大不相同,ch不能用数组的名称给它赋值,定义大小后,就想想你给10个孩子糖, 你不能只给第一个,然后其他孩子会不理你,我不是说你也明白。 >>>More
使用字符串就是使用它的第一个地址(有时和长度,实际上,拥有第一个地址就足够了),无论字符串有多长。 最明显的例子是,当一个(常量)字符串作为参数及其第一个地址传递时。 所以你的比较只是地址的比较。