C语言指针数组输出时的问题

为什么printf *ptr【k】输出时就什么都打印不出

3个回答

char *str【10】 是指 str是存着10个字符串指针的数组。
str【0】-是一个字符串指针
你要是想打印一个字符串就传入字符串指针。

指针数组的每一个元素(str[i])都是一个指针,如果再加上一个*做解引用,得到的就不是一个地址,而是字符串的第一个字符。printf("%s\t",xx)要求xx处是一个指针,所以加上*不能正常输出,,实际上编译器还会给出warning,提示类型不匹配

举个例子:
str[0] 类型是char*;内容是:Pascal

而*str[0] 类型是char;内容是:P

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
Python+OpenCV计算机视觉

Python+OpenCV计算机视觉

c语言指针 指针数组 函数数组

![图片说明](https://img-ask.csdn.net/upload/201805/08/1525778822_142150.png) ![图片说明](https://img-ask.csdn.net/upload/201805/08/1525778847_202105.png) ![图片说明](https://img-ask.csdn.net/upload/201805/08/1525778858_936491.png) ![图片说明](https://img-ask.csdn.net/upload/201805/08/1525778873_358437.png) ![图片说明](https://img-ask.csdn.net/upload/201805/08/1525778892_418278.png) ![图片说明](https://img-ask.csdn.net/upload/201805/08/1525778909_369097.png) 想请教各位大佬这几个题中指针所代表的含义 如果能解释一下题目的解题过程就更好了 最近学指针 真的是被它搞得有点晕

关于指针数组输出时如何显示分别显示 地址,元素,

const char* test[5] = { "帅气的小伙.", "漂亮的美女.", "优秀的小伙.", "怎么说呢...", "优秀的小牛." }; for (int i = 0; i < 5; i++) { cout << test[i] << endl; cout << **(test[i]) << endl; //这里的解除引用符号只有一个 不知道为什么一个不显示,两个就多一个 } test是一个指针数组 1.但为什么第一个输出会输出 元素内容而不是输出地址 ** 2.第二个可以运行 证明 tset[i]是指针 (就让我很疑惑为什这么明明是指针但第一个为什么输出的不是地址) 3.第二个为什么解除引用后 会输出 空 白啊 求大佬抱

C语言中指针数组作为函数参数传递的地址问题?

如下代码和结果 指针数据作为函数的形参和实在的时候,形参指针p和实参指针name指向同一个地址是没问题的,可为什么用&去他自身变量的地址的时候取出来的也是同一的地址呢? ``` int main() { void print(char *p[]); char *name[] = { "11111","2222222","33333333" }; printf("name[0]的地址为:%d\n", &name[0]); printf("name[0]指向的地址为:%d\n", name[0]); printf("name[0]的值为:%s\n", name[0]); printf("\n"); printf("\n"); print(name); return 0; } void print(int *p[]) { printf("p[0]的地址为:%d\n", &p[0]); printf("p[0]指向的地址为:%d\n", p[0]); printf("p[0]的值为:%s\n", p[0]); } ``` 下图为输出结果: ![图片说明](https://img-ask.csdn.net/upload/201910/17/1571290590_733033.jpg) 为了区别问题,特写了一个用指针作为参数的函数做了对比,如下: ``` int main() { void print(char *p); int name = 5; int *n; n = &name; printf("n的地址为:%d\n", &n); printf("n指向的地址为:%d\n", n); printf("name的地址为:%d\n", &name); printf("n指向的地址的值为:%d\n", name); printf("\n"); printf("\n"); print(n); return 0; } void print(int *p) { printf("p的地址为:%d\n", &p); printf("p指向的地址为:%d\n", p); printf("p的值为:%d\n", *p); printf("\n"); printf("\n"); } ``` 下图为输出结果: ![图片说明](https://img-ask.csdn.net/upload/201910/17/1571291266_40842.jpg) 为什么这里实参指针n和形参指针p自身地址是不一样的,而上面用指针数据的时候,实参指针数组name和形参指针数组p是一样的。这里有什么区别吗?

关于C语言指针数组的问题

#include<stdio.h> int main(){ int all[5]; int *putin(); int *p=putin(); for(int k=0;k<5;k++,p++) printf("%d ",*p); return 0; } int *putin(){ int array[5]; printf("please enter 5 numbers:"); for(int i = 0;i<5;i++){ scanf("%d",&array[i]); } return(array); } 代码如上图,输出结果里有数值有地址,无法理解哪里的逻辑有问题,请指教,万分感谢!

C语言指针数组问题,为什么可以不指定长度

int (*a)[10]表示一个指向一个整形数组的指针这个好理解,但是为什么int (*a)[]可以编译通过呢

C语言无法读取出指针数组里的字符串

![图片说明](https://img-ask.csdn.net/upload/201904/03/1554287909_964399.png) ``` ``` 这样的话,我可以正常地向pointer指针数组里写入字符串。 ![图片说明](https://img-ask.csdn.net/upload/201904/03/1554287972_101418.png) 但现在就无法把这个指针数组里地字符串写到文件里,我发现也无法正常的用printf输出到屏幕上 ```

字符指针数组输出前不用加*

#include<stdio.h> main(){ char* pa[7]={"sunday","monday","tuesday","wednesday"}; int i=1; printf("%s",pa[i]); int* a[7]; a[i]=&i; printf("%d",*a[i]); } 为什么printf("%s",pa[i]);的pa[i]前不用加* 而printf("%d",*a[i]);的a[i]前加*

指针数组输出为什么是乱码,请问该怎么改?

题目: 下表是国家和它们的首都: Australia Canberra Belgium Brussels China Beijing Denmark Copenhagen England London France Paris Greece Athens Ireland Dublin Scotland Edinburgh Wales Cardiff 写一个程序输入一个国家的国家名,输出该国的首都名。 **提示信息:"请输入国家名:" **输出格式要求:"%s的首都为%s!" "你输入的国家%s没有找到它的首都!" ``` #include <stdio.h> #include <stdlib.h> int main() { char *m[]= {"Australia","Belgium","China","Denmark","England","France","Greece","Ireland","Scotland","Wales"}; char *n[]= {"Canberra","Brussels","Beijing","Copenhagen","London","Paris","Athens","Dublin","Edinburgh","Cardiff"}; char x[20]; int i ; printf("请输入国家名"); scanf("%s",&x[20]); for(i = 0; *m[i] == '\n';i++) { if(*m[i] == x) { printf("%s的首都为%s!",m[i],n[i]); } if(*m[i] == '\n') { printf("你输入的国家%s没有找到它的首都!"); } } } ```

c语言数组指针,二维数组的输出

![图片说明](https://img-ask.csdn.net/upload/201701/22/1485073420_794729.png)

如何在C语言中以数组指针作为形参输出数组

#include "stdafx.h" void cmdsend(unsigned int * info); int main() { unsigned int senddata[5]; senddata[0] = 8; senddata[1] = 2; senddata[2] = 0; senddata[3] = 4; senddata[4] = 5; cmdsend( senddata ); while(1){;} } void cmdsend(unsigned int * info) { unsigned int k; for (k = 0; ((*info) != '\0') && (info != NULL); *info++, k++) printf("senddata is %d\r\n", *info); } 如上面程序所示,我想将数组sendata完整的输出,现在只能打印出8,2.即在sendata[2]处结束,好像判断为 info == NULL了,请问应该怎样修改,才能输出完整数组?在使用 *info 指针作为形参的前提下。

C语言中数组开辟空间及使用的问题

本人刚刚入门C语言,在学习数组的时候发现一个问题,代码如下,实际功能是将字符串中的大写字母转换成小写,并输出大写字母个数 #include "stdio.h" int main() { int i=0,j=0; char str[i]; scanf("%s",&str[i]); for(i=0;str[i]!='\0';i++) if(str[i]>65&&str[i]<97) { str[i]+=32; j++; } printf("%s\n",str); printf("原字符串中大写字母有%d个\n",j); return 0; } 编译环境是Linux zephyrus 4.10.0-28-generic #32~16.04.2-Ubuntu SMP Thu Jul 20 10:19:13 UTC 2017 i686 i686 i686 GNU/Linux 问题在char str[i]上,我并没有开辟数组的空间大小,而且sizeof(str[i])显示大小为0,但是打印地址时却可以成功打印出str [i]的地址。 我很迷的一点是,我并没有开辟出这个空间,但是这个空间却有地址,既然有地址,就可以按照地址顺序读入数据,那不就相当于我开辟了一个大小可以随意变化的空间?

c语言指针数组问题,数组内换元素

//输入10个整数 将其中最小的数与第一个数对换,把最大的数与最后一个数对换 #include <stdio.h> void input(int *p); void deal(int *a); void output(int *p); void main() { int a[10]; input(a); deal(a); output(a); } void input(int *p) { int i; printf("请输入十个整数:\n"); for(i=0; i<10; i++) scanf("%d",&p[i]); } void deal(int *a)//这个函数是如何实现第一个数换了之后 第二个数及后面的数自动后退一位呢? { int *max,*min,*p,temp; max=min=a; for(p=a;p<a+10;p++) if(*p<*min) min=p; temp=a[0]; a[0]=*min; *min=temp; for(p=a;p<a+10;p++) if(*p>*max) max=p; temp=a[9]; a[9]=*max; *max=temp; } /*void deal(int *p) //想问一下这个函数是哪里出错了呢? { int i,temp1, temp2, t1, t2; temp1=*p; temp2=*p; for(i=1; i<10; i++) { if(temp1 >= *(p+i)) { t1=*(p+i); *(p+i)=temp1; temp1=t1; } } *p=temp1; for(i=1; i<10; i++) { if(temp2 <= *(p+i)) { t2=*(p+i); *(p+i)=temp2; temp2=t2; } } *(p+9)=temp2; } */ void output(int *p) { int i; printf("输出数据如下:\n"); for(i=0; i<10; i++) { printf("%-3d",*(p+i)); } printf("\n"); }

用指针逆序输出数组,for循环打印不完全

![图片说明](https://img-ask.csdn.net/upload/201902/06/1549443842_560434.png) 用for循环次数少一个,打印不出第一个元素。 ![图片说明](https://img-ask.csdn.net/upload/201902/06/1549443855_480625.png)

【c语言】一维数组的倒序输出

``` #include <stdio.h> int *inverse(int *p,int n); void main(){ int a[4]={1,2,3,4},*p,i; p=inverse(a,4); for(i=0;i<4;i++) printf("%d",*p); } int *inverse(int *p,int n){ int temp[4],i; while(*p)++p;//找到p所指的最后一个元素 for(i=0;i<n;i++,--p) temp[i]=*p;//将p的值赋给temp[i] p=temp; return p; } ``` 不知道错哪里了,输出一串奇怪的数字???

关于C语言 指针数组的小问题

指针数组赋值(字符串)后,可以单独引用某一个字符串中的第X个字符(单个字符)吗?输出必须用%s 不能用%c ??

为什么在C语言使用数组时会发生访问冲突?

我想请问一下这里为什么会在scanf\_s("%s", name);处抛出异常,调整了堆栈保留大小也不行,谢谢 ``` #include <stdio.h> #include <string.h> #define DENSITY 62.4 int main() { float weight, volume ; int size, letters; char name[40]; printf("Hi! What's your first name.\n"); scanf_s("%s", name); printf("%s, what's your weight in pounds?\n", name); scanf_s("%f", &weight); size = sizeof name; letters = strlen(name); volume = weight / DENSITY; printf("Well, %s, your volume is %2.2f cubic feet.\n", name, volume); printf("Also, your first name has %d letters,\n", letters); printf("and we have %d bytes to store it.\n", size); getchar(); return 0; } ```

C语言关于指针数组和数组指针

C语言关于指针数组输出的问题 ``` #include "stdio.h" int main() { char *p1[4] = { 'A','B','C','D' }; char(*p2)[4] = &p1; for (int i = 0; i < 4; i++) { printf("%c\n", *(*(p2 + i))); } system("pause"); return 0; } ``` 这里是输出格式是\* (\*(p2 + i))) 如果替换为\*(\*p2 + i)),则错误! ``` #include "stdio.h" int main() { char *p1[4] = { 'A','B','C','D' }; char(*p2)[4] = &p1; for (int i = 0; i < 4; i++) { printf("%c\n", *(*(p2 + i))); } int *p1[4] = { 9,8,7,6 }; int(*p2)[4] = &p1; for (int i = 0; i < 4; i++) { printf("%d\n", *(*p2 + i)); } system("pause"); return 0; } ``` 这里是输出是\*(\*p2 + i)), 如果替换为\* (\*(p2 + i)))测错误! **请问如何解释这种情况。思考了很久也不知道怎么理解**

这是一个关于C语言指针输出的简单问题

``` #include<stdio.h> #include<stdlib.h> int main() { int *a,*b,*c; scanf("%d%d%d",a,b,c); printf("%d %d %d",*a,*b,*c); system("pause"); return 0;} ``` 我就是想用指针输入输出三个数,代码并没有报错,但是 我输入三个数后,产生错误,不能显示输出结果。我感觉好奇怪,我的理解是 a,b,c都是地址+数据,所以输入数据是没有问题的。然后*a,*b,*c表示整形数据,输出也应该是没问题的

定义一个指向 char 的指针数组?

定义一个指向 char 的指针数组 , 其中数组的每一个元素均是指向字符串的指针,同时定义一个 char 型的双重指针变量;利用双重指针进行 char 型指针数组中字符串的顺序输出。 解题思路:利用双重指针中指针变量与 char 型指针数组的关系进行输出。 参考代码: #include "stdio.h" #include "malloc.h" #include "string.h" #define NUM 1 struct STUDENT { char STU_ID[8]; char STU_NAME[10]; int STU_AGE; int STU_SCORE; }; int main(int argc, char* argv[]) { int i; // 定义由 3 个元素构成的数组,每个元素都是指针,此处将每个指针指向一个常亮字符串 char *CS[3] = {"Follow me","Roger that","Go Go Go"}; char **p; // 双重指针 // 在此处添加 for 循环,使用指针数组 CS 依次打印字符串,每行打印一个 for(i=0; i<3; i++) { // 学生补充代码 // 将数组中的信息赋值给指针,便于通过指针打印字符串信息 { }//end of 学生补充代码 printf("%s\n", *p); } return 1; }

2019 Python开发者日-培训

2019 Python开发者日-培训

150讲轻松搞定Python网络爬虫

150讲轻松搞定Python网络爬虫

设计模式(JAVA语言实现)--20种设计模式附带源码

设计模式(JAVA语言实现)--20种设计模式附带源码

YOLOv3目标检测实战:训练自己的数据集

YOLOv3目标检测实战:训练自己的数据集

java后台+微信小程序 实现完整的点餐系统

java后台+微信小程序 实现完整的点餐系统

三个项目玩转深度学习(附1G源码)

三个项目玩转深度学习(附1G源码)

初级玩转Linux+Ubuntu(嵌入式开发基础课程)

初级玩转Linux+Ubuntu(嵌入式开发基础课程)

2019 AI开发者大会

2019 AI开发者大会

玩转Linux:常用命令实例指南

玩转Linux:常用命令实例指南

一学即懂的计算机视觉(第一季)

一学即懂的计算机视觉(第一季)

4小时玩转微信小程序——基础入门与微信支付实战

4小时玩转微信小程序——基础入门与微信支付实战

Git 实用技巧

Git 实用技巧

Python数据清洗实战入门

Python数据清洗实战入门

使用TensorFlow+keras快速构建图像分类模型

使用TensorFlow+keras快速构建图像分类模型

实用主义学Python(小白也容易上手的Python实用案例)

实用主义学Python(小白也容易上手的Python实用案例)

程序员的算法通关课:知己知彼(第一季)

程序员的算法通关课:知己知彼(第一季)

MySQL数据库从入门到实战应用

MySQL数据库从入门到实战应用

机器学习初学者必会的案例精讲

机器学习初学者必会的案例精讲

手把手实现Java图书管理系统(附源码)

手把手实现Java图书管理系统(附源码)

极简JAVA学习营第四期(报名以后加助教微信:eduxy-1)

极简JAVA学习营第四期(报名以后加助教微信:eduxy-1)

.net core快速开发框架

.net core快速开发框架

玩转Python-Python3基础入门

玩转Python-Python3基础入门

Python数据挖掘简易入门

Python数据挖掘简易入门

微信公众平台开发入门

微信公众平台开发入门

程序员的兼职技能课

程序员的兼职技能课

Windows版YOLOv4目标检测实战:训练自己的数据集

Windows版YOLOv4目标检测实战:训练自己的数据集

HoloLens2开发入门教程

HoloLens2开发入门教程

微信小程序开发实战

微信小程序开发实战

Java8零基础入门视频教程

Java8零基础入门视频教程

相关热词 c#跨线程停止timer c#批量写入sql数据库 c# 自动安装浏览器 c#语言基础考试题 c# 偏移量打印是什么 c# 绘制曲线图 c#框体中的退出函数 c# 按钮透明背景 c# idl 混编出错 c#在位置0处没有任何行
立即提问